{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 导入相关的库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "plt.rcParams['font.family']=['sans-serif']\n",
    "plt.rcParams['font.sans-serif']='SimHei'\n",
    "plt.rcParams['axes.unicode_minus']=False"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 不纯度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "p=np.linspace(0.01,0.99,100)\n",
    "# 计算不同比例下的信息熵\n",
    "h=-p*np.log2(p)-(1-p)*np.log2(1-p)\n",
    "plt.plot(p,h)\n",
    "plt.xlabel('P值')\n",
    "plt.ylabel('信息熵')\n",
    "plt.title('信息熵(不纯度)')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 不纯度度量标准"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjQAAAEECAYAAAA/Ga4zAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOzdd1yVZRsH8N99BhtBZLhQFEVzYQpqrjRzlb6O13JnjsydmSPfLM3KTE1zNpyVI63c21LcC1RUVHChiLL3PodzvX/cTEVwAA8Hru/n83w4PDznnOucEq5zj+sSRATGGGOMMWOmUjoAxhhjjLGXxQkNY4wxxoweJzSMMcYYM3qc0DDGGGPM6HFCwxhjjDGjxwkNY4wxxoyeRukAnoe9vT25uLgoHQZjjBkVHx+fCCJyUDoOxoqSUSU0Li4u8Pb2VjoMxhgzKkKIe0rHwFhR4yknxhhjjBk9TmgYY4wxZvQ4oWGMMcaY0eOEhjHGGGNGjxMaxhhjjBk9TmgYY4wxZvQ4oWGMMcaY0eOEhjHGGGNGjxMaxhhjjBk9TmgYY4wxZvQ4oWGMMcaY0TOqXk6MMcaYknx8fBw1Gs0qAA3AgwLFyQDgql6vH9G0adOwvC7ghIYxxhh7RhqNZlXFihVfcXBwiFapVKR0PGWFwWAQ4eHh9UJCQlYB+E9e13B2yRhjjD27Bg4ODnGczBQvlUpFDg4OsZAjY3lfU4zxMMYYY8ZOxcmMMjLe96fmLUWa0AghnIQQx/P5uVYIsUsIcVIIMawoY2GMMcZKi82bN9uEh4erAeDmzZsmR44cscjruri4ONW1a9dMnuexdTpdYYRY7IpsDY0QojyAXwFY5nPZeAA+RDRLCLFXCPEnEcUXVUyMvTS9HoiLA5KT5ZGUBKSkACoVoNVmH+bmgJ2d/CqE0lEzxkoRg8GAWbNmValdu/admzdvmkRHR6vXrVtnb2pqGgoAVatW1ZUvX95w48YNk2PHjlmdPHnSavr06SGZ93dzc0uzsbExAMD+/futNm/eXH7VqlVBBoMBcXFx6rffftv1zJkzAQaDAenp6dBqtUq91OdSlIuC0wH0BbAjn2vaAfg04/YxAB4AjhRhTIw9HREQGQncvJl93LkDhIQAoaHyiIyU1z0rU1OgQgWZ3FStCri4ADVqyK81awL16gEWeX6wYoyxPG3evNmmcePGib6+vuaBgYEmKpWKGjZsmHTo0CHr9PR00apVq0S1Wk1ff/11pd69e0e3a9cu/vTp05YAsHPnTtvx48eH9ejRIx4A1Go1mZubGy5cuGA2ZcqUqkIIWFlZpbdt27a2RqOhPn36RI0ZMyZK2Vf8bIpsyomI4ogotoDLLAEEZ9yOAuD0+AVCiJFCCG8hhPeFCxcghMg6Ro8ejdGjR+c6Z2trm3m/XAcAmJiY5Dq3ceNGtGnTJte5GjVqPHF/lUq+TSqV6onHrFGjRq5zbdq0wcaNG3OdMzExeWpMtra2/JqUeE2tW2Pj4sW5X5NKBTg4QLRsCTFkCMTXX0Ns3AgcPgxbPz+IiAgIIggAo83NMdrKCgLIOmyFAOrWzXVOpKYCDx/C5OpViP37IX76CWLaNGzs2xdtPD0hLC2zX1P58sC+ffzfiV9Tob8mVrrMnz+/klarpQ4dOsQfOnTI5ujRo+WOHTtmffTo0XJnzpyx6ty5c4JWqyV/f3/z9evX2+c8rl+/bqFWqwHI0RkvLy/rS5cuWc6ePbvSgQMHbtva2up37dp1JyEhQb1v377bxpLMAICg5/m0+SJPIIQXEbV7ys92APiQiEKEEJMAhBDRxqc9loeHB3l7exdRpKzUu3sXOHwYOHIE8PICgoOfvMbKCqhdG3Bzk19dXYFKlQAnJ6BiRcDeHtA848AmkZyWiowEIiKABw9kDIGB8uvNm4C/v5zGykkIoFEjoE0beXToIEd5GHtBQggfIvJQOo7SwNfXN9Dd3T0CACBE0yJ5EiKfp/1o2bJlFQ4dOlTOxsYm/aeffgo6ePCgleax30ndunWLP3LkiMWsWbMq9+jRIybnz3bv3m07adKk0G7dusV///339qGhodoDBw7Y7Nq161ajRo0auLm5JWdeGxISop0/f35Q3759CxqcKDa+vr727u7uLnn9TOk6ND4AWgP4C4A7gDPKhsNKFZ0OOHYM2LED2LVLJhI5VagAeHgATZtmH9WqFd6aFyHkdJKFBeDsDLz66pPXpKYC168Dvr7yOHMG8PbO/n7ZMrk+p0UL4K23gLffBtzdeV0OY2VUr169Ylu0aJG4ZMkSR51OJx4+fKhVq9UQQhARCa1WSwCg0+lEQECA+R9//KHOef/g4GATfcaHKFNTU3J0dNT16NEjulq1avqGDRsmurq6psyYMSNk0qRJVRs1apRoampqUOBlvpBiS2iEEG8AqEdEy3Kc/hXAXiFEGwD1AJwtrnhYKZWWBuzdC/z9N7B7NxCT48NJ+fJAu3ZA+/byqF9f+cTA1BRo3FgemZKTgXPngBMn5GjSsWPAqVPymDFDJkd9+wL9+8skSenXwFhZlc9ISlGpUqWKPiEhQQXIhGTdunUOOX9evXr11GHDhkV36tQp8dGjR1cAID09HeHh4eqKFSumA0BmQjNu3LjIBQsW2N+6dcsMAEJDQ7UpKSmqAQMG1AQAa2vr9GJ8aS+tyOvQZE43EdHhx5IZENE9AB0BnATwJhEZ1ZvHSggi4OxZYOxYOT3Uqxewfr1MZl55BZg+XY58REQAW7cC48cDDRqU3ETA3Bx4/XXgs8+Af/6RU1bbtgEjRgCVKwNBQcCCBXJEqW5dYOZM4PZtpaNmjBUzrVZLGo2Gzp075595hIeHawBgypQpla5du2bSt2/f6v/++6/lsGHDqgPAkSNHLHr06FEz8zFOnDhhrdfrMWHChMpVqlRJq127dsqmTZvuWFhYpNepUydFqdf2IpSecgIRPQSwRek4mBGKjgbWrgV++UWuRcnUsCEwcKBMbNzclIuvsFhbAz17yoMIOH0a2LQJ2LIFCAgAZs+WR8eOwKhRQPfucus4Y6xU0ul0ApCLwK9du2bRsmXLrF90ycnJqqNHj1rcu3fPBADS0tJEp06dEm1sbB5dvHjRLDw8XGNjY6Nfs2ZN+XfeeSc2JiZG/c8//9zduHGj7ZUrVyzc3NxS+vfvX7Ny5cppmc9hLBRPaBh7bpcvy7Ul69fL6RlALtgdMAB47z25xqS0EgJo2VIeixbJRc7r1wN//gkcOiSPSpWA4cPliFXFikpHzBgrZHFxcSqdTifS0tJEvXr1kk6dOhWQ+bNWrVrVVqlU+OSTT8Ls7OzSz507Z92sWbM6ABAVFaWZMWNG8OrVq4NMTExoxowZFfv27Rul0WjQp0+f2LVr19rPmjUrdNasWaEHDhywmjBhQrX+/fvfUu6VPp8i3+VUmHiXUxlGJP9Yf/ut3KGUqWNHYNw4uWD2WXcflUZRUcBvvwE//wzcuCHPmZgAQ4YAkyeXjpEq9sJ4l1PhybXLychlrqV5fJcUIIv3AcgqSVBS5LfLqWRFytjjDAZg+3agWTOgc2eZzFhZySTm+nXg4EHgP/8p28kMIAv3TZwIXLsm36NeveQur5Ur5Tqb//4XOH9e6SgZYyWIRqPJM5kBZCJT0pKZghhXtKzsIAL++kvWY+nVS25ldnCQIzQPHgBLl8o/1Cw3IeSC4q1bZcI3YoRcT7N1q0wKe/UCrl5VOkrGGCt0nNCwksfLS9ZdeecdwM9PtgxYskTWkfn0U8DGRukIjUOdOnKEJjAQmDJF7p7avl0miQMHAreMZmqcMcYKxAkNKzkuX5ZrYdq3l3VYKlYEfvxRbkkeP557Hr2oSpWAefNkX6rx4+X03MaNcoRrwgS5/oYxZlSU7Lbt7+//1MdLTU3Nc1tUcnJyrvOPP8fzxpgXTmiY8qKigDFjZHG5ffvkNuWvvpIjCKNGycWt7OVVrChHum7eBIYNk9N6S5fKBcM//vhkCwbGWImU2W07KChIe+rUKfOAgACTFStWOJ46dcr81KlT5vfv39fEx8erzp8/b7Zy5Uq7GTNmVD5//rxZ5hEbG5v1t3///v1WQ4cOdU5PT4dOp0NkZKS6TZs2bpnP83ji8dlnn1U8c+aMBQB4e3ubjR07tkrOn7u7u78SFxeXK7cICgrSdOrUqVbm96Ghoer69evXy1x4DAB///237U8//WT3Mu8LJzRMOQYDsGpV9h9UlUqOGNy+LSviWloqHWHpVL06sHo1cOmSHA2LjJQJZZMmsjIxY6xEy9lt+8CBA+W8vb0tMrtt79+/v9z169fNzp49az5lypSqWq2WMrttnz592nL69OlVvLy8sn655uy23bFjx1p9+vSpkdlt+80336y1cuXKrCTD39/fJCgoyGTIkCExALBq1Sr7jz/+OOzff/+1rFq1asOWLVu62dnZ6bt06VKrcePGdUeOHFk1ISFBlCtXztCqVav4oKAgTXR0tGrXrl3levfuHaVSqaDX66HX6/H555+H7d271yY6OvqF85IyvjWEKebCBflH9GxGt4t27WRtmfr1FQ2rTGnYEPj3X1mF+JNPgCtXgDfeAN5/X1Yi5oaYjJVI8+fPr9SgQYOkDh06xPfr16+mmZmZQaVSkcFgEBqNhmbPnh169OhRi4xu20/0csrZbfv48eNWGd22TQ4cOHC7X79+1Tdu3HivVatWdU6fPu1vamqaVdtl1apVFSZOnBgGADdu3DDRarW0fft2G0tLS0Pbtm3jqlatmjZixIhItVpNISEhmjt37piuWbPG7tdff7WPiorSeHt7W1apUiUtNjZWExERoWnQoEH5hIQE9dy5c4P69esXO2jQoMiNGzfajh079oXmwTmhYcUrJUVWtZ03D0hPl6X8v/9e9iYyooqUpYYQQO/ecu3SggXA118D69bJfliLF/N/F8YKIL6UHbdpZnZfpzd+faPWkcAjNht6b7g1oOGAWABYcGqB/ZRDU6r3q98vYlOfTfcAIDAmUFtjcY1GDhYOurApYZef5fmWLVtWwdnZORUA7O3t06dOnfroaXVk3NzckvPqtp1528/Pz0yn04nExETVH3/8EeTk5OTu5uaW/Prrr7tpNBqqXbt2/Zzdtu/cuWPapEmTFAD4/fff7aKjo9UnT560P3r0aMCaNWscPvvss5B9+/ZZ//zzz45jxowJa9euXUKDBg1S69Spk3rgwIFyCxcufOjn52farl27OkeOHPE/d+6cRVxcnKpfv36xANC+ffvE6dOnVwLACQ0r4c6eBYYOlduJhZB1U2bPlmtmmLLMzOQ037vvAiNHAkePyuaX69fL6UBnZ6UjZIyh5HTb/uabb0I+//xzp6FDh0aOHj266sOHD01eeeWV1MGDB9cIDw/X/vbbb/bdu3ePA+RC4a1bt9odPny4nJubW3KvXr2idu/eXS4uLk7dokWLxMzHtLS0NCQnJ/OUEyvBUlKAzz8HFi6U62bq1AHWrJHl+1nJ4uYm2ymsXi23eu/ZI7d5//gj0K+f0tExVuLkHJnJdHjI4SdqIkxuOTlicsvJuSoMu9i66PK6f36U7LZtZmZmiI2NVdnY2Bg2bNhg89tvvzlkrKmJvHfvnqlKpYKDg4PuwoULN4YNG+ac+TyPHj3STpw48VHz5s2Ttm7dajt58uSwAQMGuJiamtK4ceOy3pMbN26YOjs7pz3P+5ETLwpmRcvPD/D0lNMZADB1KnDxIiczJZlKBXzwgRxJ69ZNdi3v31/WromJKfj+jLFiUdzdtt9+++3Y3377rTwAeHp6Jq9fv/7OsmXLHnTs2DFrlOXixYuWLVu2dNu3b1/W1NbRo0et3N3dk+Pj41VWVlbpTk5O6SYmJpSSkqKqXLly1vbKDRs2lO/Vq1fsi74fnNCwokEkP9V7eMjKtLVryy7R330nC7yxkq9SJWDnTuCnn2QNoI0b5WhNzl5ajLFil1e37cwjNjZWk1e37ZkzZz7RbTs+Pl4VExOj3rhx4z0PD48kAMjstm1ra5ue+RyZ+vXrF7tv3z6b4OBgzZ07d0yOHDliNXLkyGo5t1s3adIk4dSpUwFdu3aNAYCEhARx+fJlyzZt2iQFBgaaVKhQIf3Ro0ea2NhYTUJCgvrhw4caALh8+bLpw4cPTZo3b578ou8LJzSs8EVGyoWmY8bI6aahQ+WupmbNlI6MPS8hgA8/lKNqnp5AUJDcCfXll3JRN2Os2OXVbTvzsLCwSM+r2/b48eOrvfPOO65JSUmq1atXBw0ZMiR6zpw5jjm7bQPArFmzQs+dO+c/evTo8A0bNtjXq1cvNfN5VSoVli5dGrRr165yt2/fNomKitL069cvqn///jF6vV4YDAacPXvWulmzZnX27NlTXqfTiW+//dbpvffei9i7d6/10qVLK8bFxam6dOlSa+7cuQ/mzJnz4PXXX6+zdevWcvv37y+3fPnyoJd5X7jbNitcZ87IlgUPHgDlygG//CJ3yjDjp9PJgodffy1H4Dp1kouGHRwKvi9TFHfbLjzcbfv56HQ6qNXqrMeJjo5WmZmZkbm5OQFAfHy8iohQrly5PBcfP467bbOiRwT8/DPQtq1MZlq0AHx9OZkpTbRauSvtwAHA3l52Om/SRE4lMsaMTnF029Zqtbkep3z58obMZAYArK2tDc+azBSEExr28lJSZFfnUaPkp/hx4+S2XxcXpSNjRaFjRzkF9dprMnlt21a2VDCi0V7GWOnDCQ17OffvA61by23Y5ubA77/L/kDcf6l0q1pVJq0ffyx7QH30kaxfk/bCOy4ZY+ylcELDXtzZs3Khr48PULOmnHoYNEjpqFhx0WplbaFNm2RhvlWr5OhNRKlYXsAYMzKc0LAX89dfsv9SaCjQoQNw/jzg7q50VEwJ/foBx47Jbd7Hjskk189P6agYYy9Ar9fD19fXdN26dbanT582qhobXCmYPR8iYO5c4H//k9+PGAGsWCE/rbOyy9NTJrU9ewLe3nJ9zZ9/Ap07Kx0ZY6VOUFCQ5p9//rE+ceKE1ddff/0IALp27Vrrt99+u+vo6KjPrAhsbm7+ar169ZJy3jcpKUnt6uqasnv37jsAMHToUOdLly5ZpqWlicTERHWVKlVSnZycdNWqVUsjIvHaa68lA8DEiRMrd+jQIf7gwYPlrK2t06dMmRLWvXt3Vy8vr5tPW1hc3EpGFMw46HSyJsnatbI+ybx5skszNy9kAFClilxXM2wYsHmzrDK8Zg0weLDSkTFWqvz99982ly5dsrh9+7bZypUr7QAgJiZGs337dpsaNWqkDR48OAYAnJ2dU318fPxz3vfUqVPmc+fOrZj5/bx58x5qNBp69OiR5q233nJbu3btPWtra0N0dLSqXr16aQAQGxurKleuXPrJkyctw8PDNaGhoZpbt26ZWFhYGDQaDdIzalJldvFWCic07NkkJcn6Mnv3ysW/GzYAvXopHRUraTIrClevLhPe994DQkKAyZM58WWskEycODHywIEDqcOHD6+xf/9+AciE5osvvgjLeV1YWJhJ06ZN6+Q8l5SUpK5Zs2ZWS4MKFSqk792713revHkVDx48GJCSkiL69OlTq2/fvlH16tULA4CoqCh1ZGSkZt26dY5169ZNatasWcKiRYscAwMDTT08POrcv3/fdPPmzbfat2+fazSouHFCwwoWHQ107w6cPAlUqCCTGq76y55GpZItLipVkrugpk4FgoPlAuJCqGvBWEkiBJo+7Wfz5+Pe5MmIAIAFC2A/ZQqqP+1aIjxXk0oAqFq1amrr1q3jAeDBgwdPbC11dHRM8/Hx8U9OThY5a788burUqVVNTU3J09OzXqtWreJ27dp129LSMqs2jFqtpvv375t8+OGHoTdv3jQNDQ3VXr9+3WLWrFnBdevWTV22bJmD0skMwIuCWUEePQJef10mM1WrAidOcDLDns3EiXIHlFYLLF4MDBggpy0ZYy9s3bp1th4eHnUmTpxYLSgoyNTLy6ucl5dXuZiYGE2zZs3qNG3atM6+ffuskpOThYmJCQFAnTp16mdWBQ4ODtasW7cuq3FkVFSU+vPPP3/YsGHDpOXLlwdu27btblhYmLpbt26u58+fNwNk76jZs2c/0ul0YvLkyaGTJ08OdXR0TPP29ra8e/euSc2aNVPzDLaY8QgNe7rbt+U23Lt3gbp1ZWVYZ2elo2LGpF8/wNFRLhbevBlITga2bAFMTZWOjLFC8awjK5MnIyJztOZlDBw4MKZPnz6x06ZNq+zg4KCvVKmSzsXFJe3EiROWMTExmq+//vqRpaWlwd/f39TR0VEHAGZmZoaYmBj1kiVL7Ddv3lyhd+/eUXq9HhqNBgsXLnRYs2aNo729vc7Hx8dy/Pjx1WvXrp1iaWmZ3q9fP9e//vrrdnh4uPrzzz+vEhgYaHb16lXza9euWdy/f/9K165dXQGgW7duL9whuzBxQsPy5u8PtG8vR2g8PeU0k7290lExY/TGG8Dhw7L3086dQI8ewNatcr0NY+y5bN682XbmzJlV3N3dE729vS1DQkJMLCwsDNbW1umNGjVKrFOnToONGzfe9vPzM3N3d8+aBurfv7/L+++/H+Hn53ct566kOXPmhNSvXz/5rbfeio+KilJPnTq1yk8//RS0f/9+67Zt2yZWrVpVp1arcfHixeizZ89adunSJfbixYvJpqam5O7unrR3717b+fPnP1TkzXgMJzTsSTduyGQmJETWmtm5E7C2VjoqZsw8PIAjR+SI34EDwNtvA7t2AVZWSkfGmFFp3bp14rFjx/ydnJz0RISvvvrKqVGjRsmdO3dOMDc3N9y+fTvM2dlZN23atKrLli27n3m/zZs337WzszMAwPz58+2JSEydOjV83rx5DsePH7d666234jOvNTExob/++qv8oUOHyq1evfq+Wq3GlClTwlesWGGYP39+5SpVqqTeuHHD5Pr162YmJiaGkydPWrRt21bxNTSc0LDcrl2Tn6hDQ+XXXbv4kzQrHO7ugJcX8Oab8mvnznLkz8ZG6cgYMxouLi664cOHOwcEBJhpNBp6+PChya5duwzLly/Xp6amis6dO8fWrVs31cbGRt+8efNkAHjllVeSPT09X7G1tdUDwP37901/++23O76+vqZ37twx3bFjx90zZ86Yz5w5s7Krq2uqjY2NYceOHXe/+OILp5CQEI2ZmRkNHTq0uouLS6q3t/f1CxcumL333ns1FixYEFS5cmVd7969XTdt2nS3fv36iq6lEWREDeU8PDzI29tb6TBKLz8/mcSEhck/Ojt2cDLDCt/Nm7K6dFCQLMB34ACPABYxIYQPEXkoHUdp4OvrG+ju7l7i+3ukpKQIMzOzZ/4DHxsbq/L19TV77bXXkrR5FErV6XTIPG8wGGAwGLI6dRsMhkLpzP0sfH197d3d3V3y+lmRRSCEWC2EOC2EmPGUn5cXQuwVQngLIX4uqjjYM7p2TU4zhYXJaYGdOzmZYUWjdm3ZIqFaNdn/6z//kXWOGGOF5nmSGQCwsbExtG3bNs9kBgBynlepVMi5Dqe4kpmCFEkUQojeANRE9BqAmkKI2nlcNhjAhoxPDdZCCP70oJQ7d+SITHi4nAbYsUMWz2OsqLi4AP/+K2vVeHkBvXsDqSVi5ydjzEgVVVrVDsCWjNsHAbTO45pIAA2EELYAnAEE5fVAQoiRGaM43uHh4UURa9kWHCyTmUeP5ALgbds4mWHFo1YtmdQ4OMhpp759uU4NY+yFFVVCYwkgOON2FACnPK45AaA6gAkArmdc9wQi+oWIPIjIw8HBoShiLbsiIrLrzHh6ymkmTmZYcXrlFeDQIaB8eTkyOGgQkNEXhjHGnkdRJTQJADL/Mlo95XlmAhhFRLMB3AAwtIhiYXmJiwO6dAGuXwcaNAD27eOFmUwZ7u5yhKZcOVl0b8IE2dWdMfbC/Pz8ylz1yqJKaHyQPc3kDiAwj2vKA2gohFADaA6Af4MVl5QUuRDTxweoWVNWAK5QQemoWFnm6SlLBJiaAitWAHPmKB0RYyXWhQsXzDp16uSa+X2XLl1qpqenY+jQoc7+/v4mADB16tQqy5Ytq3Dx4kWzKlWqNGzZsqVby5Yt3erXr//KN99845h539TU1KyusV999ZXjL7/8Uj7ze52RTQEXVR2a7QCOCyEqA+gKoJ8Q4msiyrnj6VsAayGnnU4D2FREsbCcDAZgyBDg6FGgcmXgn3/kwkzGlNa2rezU3acPMGOG/P9y2DClo2KsxJk+fXqV4OBgk4kTJ1aOj49XX7hwwertt9+ueeXKFcsbN26YL1++/P7GjRsD58yZ46jVaqlHjx5RK1asCAaA3bt3W1+7ds0s87GaNm1a18zMzKBSqfDw4UOTypUrp61atcqRiJCcnKw6c+bMDSsrK6MYcCiShIaI4oQQ7QB0BDCPiEIA+D52zTkA9Yvi+Vk+Pv1UDutbW8tppho1lI6IsWy9ewPLlgFjxwIjRwJOTrKqMGMMALBo0SL7mjVrpmzZsuWuSqWCtbW14c033zTZv3//nb59+1afPXv2I1dX1zSNRoPvvvsuxNfX13THjh12ly5dsgSA2NhY9YABAyIzH69Dhw6xzZs3TwwPD9fcvn3btGbNmqnVq1fXBQUFaW/fvm1qLMkMwIX1ypbly4Fx4wCNRlZo7dhR6YgYy9uMGcA338hF6ocPAy1aKB2RUePCeoXn8cJ6Xl6i6fPc38KiXlKzZn7XH79/u3b0TE0u79+/r/nuu++ctm/fbjd58uRH27dvtw0KCjKtXr16anBwsIm9vb2+a9euMevWrXMYO3Zs6JAhQ6KTkpJEzroxqampwsXFRQcACQkJIiAgwHTIkCE1kpOTVdWrV0/ZtWvXnT///NNm4MCBMTnvVxLkV1ivZEXKis6OHXKxJQCsWsXJDCvZvvoKePgQWLtWrvc6d07WrmGsjLOysjK0aNEi8dq1a+aNGjVK7t+/f3RAQIBpzp83adIkpUKFCnq9Xi/8/PxML1++bH7u3DnLmJgYdefOnWN1Op0YN25cpEajga+vr9mGDRvs5syZ82DVqlX2o0ePDh8wYICLjY2NPjo6Wj1x4sTI/OIpSTihKQvOnQP695frZ8NQC6YAACAASURBVGbPlmtoGCvJhAB+/hl48EBu6+7eHTh5Uu6EYqwEedaRlcK6f0JCgurOnTsmCQkJ6oCAANNbt26ZHjt2zOr111+PB4B169bZnzp16mbm9fPmzasYExOjDgkJMSEiREdHa1JTU1UGg0EMGTIkevny5Q4LFy4MHjx4sEt8fLx6/vz5TlqtlubNmxe6bt06u+dtoaAkTmhKu+BgoGdPIDkZGD5cDuUzZgy0Wrne67XXgKtXgQED5EijWq10ZIwpplq1avp+/frFXL582cLMzIyICKdOnbK+efOmOQCo1eqs5GPXrl22X3zxxaOmTZsmt2nTxk2j0dC2bdvu2NvbpwPADz/8UOH+/fumgwYNcgGAqKgoTUJCgrpixYppY8aMcdbr9WLFihX6SZMmlfjeVQAnNKVbcjLQq1d2FeAff5SffBkzFra2cjt38+bAnj3A1KnA998rHRVjikpJSRFeXl42dnZ2ek9Pz8SPP/44ZMKECZEA0K5du1oAcOvWLbPU1FRV1apVdd27d685evToMFdX19Ru3bq5zps370Hbtm2TJk6cGJlzSmn27NmOFStW1I0cOTJaqdf2MkpGRylW+IiADz4Azp+Xaw/+/FN+4mXM2NSqBWzdKhezL1wo14AxVoYFBQWZjBo1KnTlypUPdDqdWLRoUcVmzZrVadasWZ34+Hg1AHz44YcRP/744/1Bgwa5TJ8+PWTEiBHR7du3T1q5cuW9b7/9tuLu3bufqKSampqq0uv1Rvupl3c5lVbz5gHTpgGWlrKjccOGSkfE2MtZvRoYMUImNocPA23aKB2R0eBdToXn8V1OrHjlt8uJR2hKoz17ZL0ZAFi/npMZVjoMHw5MmgTo9cA778hdUIwVP4PBYDDaUQxjlvG+G572c05oSpuAALl4kkhufe3ZU+mIGCs8330HtG8PhIbKpCYtTemIWNlzNTw83IaTmuJlMBhEeHi4DYCrT7uGFwWXJklJsmx8XBzw3/8Cn32mdESMFS6NBvjjD6BpU+DUKeCTT4ClS5WOipUher1+REhIyKqQkJAG4EGB4mQAcFWv14942gW8hqa0IAKGDgV+/RVwc5OLgblmByutzp6VvZ/S0oDffwcGDVI6ohKN19CwsoCzy9Ji9WqZzJibA3//zckMK92aNweWLJG3R44EfH3zv54xVupxQlMaXLggezQBsrpqgwbKxsNYcRg5Uo5KJifLKda4OKUjYowpiBMaYxcdLdfNpKYCH34IDB6sdESMFQ8hZMPVxo2B27eBUaPk1CtjrEzihMaYEcmtrHfvAk2aAD/8oHREjBUvc3Ng82ZZb2nTJmDdOqUjYowphBMaY/bLL8C2bYCNjawEbGamdESMFT83N2DFCnl73Djg+nVl42GMKYITGmN1/Trw8cfy9k8/ATVrKhsPY0p67z053ZqUBPTrJ9fVMMbKFE5ojFFqKtC/v/ylPWSI/AXOWFm3fDlQuzZw+TIwebLS0TDGihknNMZo+nS5TdXVlYuKMZbJ2loW3TMxkVNQ27YpHRFjrBhxQmNs9u8HFi2SFVM3bpS/xBljUpMmsjErILd1h4YqGw9jrNhwQmNMwsKA99+Xt7/6CmjWTNFwGCuRxo8H3nwTiIgAPviAt3IzVkZwQmMsiIAxY+QnznbtgClTlI6IsZJJpQLWrJG7/3bt4q3cjJURnNAYi82bZUsDa2v5C1qtVjoixkouZ2dg2TJ5+6OPgMBARcNhjBU9TmiMQUgIMHasvL1wIVC9urLxMGYMBg4EevcG4uPlVK3BoHREjLEixAlNSUckS7pHRQGdO8vKwIyxggkhazQ5OgJHjwKLFysdEWOsCHFCU9Jt2ADs2CHXA6xaJX9JM8aejYMDsHKlvD19OuDvr2w8jLEiU2BCIySPp/ysRuGHxLI8fCh3bACyT1PVqsrGw5gx+s9/5JRTaqrc9cRTT4yVSs86QrNDCLFQCDFOCOEJAEKIpgA2Fl1oZRyR7J4dEwO8/basCMwYezHffw84OQHHj2eP2DDGSpV8ExohhCAiAnALwM8AAgB0FUJcALAMwDtFH2IZtWULsHu3nGr65ReeamLsZdjZZVfVnjoVCA5WNh7GWKEraIRmnxDiLwA2AGoBaAHAA8BOAA8AOBRteGVUdLTcagrIqqeVKysbD2OlQZ8+cvopLk7WdOKCe4yVKgUlNH0AzARwGsBsAM0A9CKiWQCmAPheCB46KHSffioL6LVqBYwYoXQ0jJUOQsgeT+XKATt3yrpOjLFSo6CEZgyAiQBiAFwG8BmAu0KIbwEsBTAtY0rqCUKI1UKI00KIGfk9gRBihRCi+/OHXkqdOCGnmLRa+VXFG9EYKzRVqmT3eho3TpZDYIyVCgX9tSwHgAC0BGACQAPAF8AlAC4A/PK6kxCiNwA1Eb0GoKYQovZTrmsDoCIR7Xqh6EubtDS5EBgApk0D6tVTNh7GSqMPPgDatpWjoFOnKh0NY6yQFJTQ/APgLoBXAfgD6AXAHUAXAPMA/O8p92sHYEvG7YMAWj9+gRBCC2AlgEAhRI/nDbxUmj8fuHYNqF0b+OwzpaNhrHRSqeTop4kJsHo1cOaM0hExxgpBQQlNewBpkDua6gD4HXLH0xki+h2AqxAir8ewBJC5jSAKgFMe17wH4BpkYtRMCDE+rwCEECOFEN5CCO/w8PCCXo/xunlTdtAGZHVTMzNl42GsNKtTJ7vB65gxQHq6svEwxl5avgkNEc0E8BNkQjMJQAKAGUT0c8Ylo4korypVCQDMM25bPeV5XgXwCxGFAFgPmTzlFcMvRORBRB4ODqV0UxWRLKCXmirrzbzxhtIRMVb6/e9/QLVqwMWLwM8/F3w9Y6xEK3DFKRElEtFDIgolomAAEQCQMTKjfcrdfJA9zeQOIDCPa24BqJlx2wPAveeIu3TZtQs4cEDWnJk/X+loGCsbLCxkBW5ATvGGhSkbD2PspTw1oRFCNMpY3JvzXH0AW4UQTgB+ADD4KXffDmCwEGIhgHcB+Akhvn7smtUA2gshjkHuplrwgq/BuKWkAB9/LG/Pni17zzDGikfPnkCXLrIi96efKh0NY+wl5DdCUwtAIyGEixBirBDCBsASAHcgC+yVJ6KFed2RiOIgFwafAdCeiHyJaMZj18QT0TtE1JaIXssY/Sl7vv8euHMHqF9fzuUzxoqPEMCSJXKB8Nq1wKlTSkfEGHtB+SU0VwFUBxAPORJjBuAjyDUxXgBG5ffARBRNRFsy1siwvAQFAXPmyNtLlgAajbLxMFYW1a6dvX177FhAr1c2HsbYC8kvobkFoBLk4t73ACwGcANAAwCLACwVQsx9yi4n9iymTAGSkmRJdl4IzJhypk8HqlcHLl3i5pWMGamnJiMZu5dqQNaiSQbQEUBXAPcBzADwBQA3AI2LPsxS6OhRYPNmwNwcWFA2lw8xVmJYWGT/O5w5U/Z7YowZlYJGV+Ihk5ifAVwH0AlAOoBYANEAvoQsuMeeh14PTJggb3/6qfxkyBhT1n//K/unhYcD336rdDSMsedUUEKTCiAMsvidOYD9kNNQ7SFryPgSUWLRhlgKrVsHXL4sE5nM4l6MMWUJASzM2OewaBEQGKhoOIyx51NQQnMegIaIvIioKYATAJYT0W4Ax4QQc4s8wtImMRH44gt5+9tv5ZQTY6xkaNYMGDBAFrmcPl3paBhjz6GgSsETiSg2x/exRPRdxu2fAawp4vhKn4ULgUePAA8PoG9fpaNhjD3u229l65E//uA+T4wZkZfdoVSlUKIoK0JDgXnz5O3582WTPMZYyVKtGjBpkrw9aZJsTcIYK/Hy/YsqhFALIbYKIbRCiB0Z53LeZ3aRRlfazJ4NJCQA3boB7dopHQ1j7Gk+/RRwdAROnwb+/FPpaBhjz6CgKad0yIJ6nwOoLYSYBOB3IURvIYQ5gEfFEGPp4O8vG+CpVMB33ykdDWMsP9bWwFdfyduffgqkpSkbD2OsQM8y52EAcBRAJABXABYA6gFYC+Bw0YVWykyfDqSnA8OHA/XqKR0NY6wgw4YBr7wC3L0LrF6tdDSMsQLk15xSK4Q4AMBARP9CdtkOBkAAfoPcuu1dLFEauxMngG3bZPGuL79UOhrG2LPQaLJHab76Slb1ZoyVWPlVCtYBmABACCHWAmgC4A0ApgB+ATAcQK/iCNKoEWV38Z08GahUSdl4GGPPrndvoGlTuTNx+XKlo2GM5SPfbohE5C+EIMiKwFUAfACZzHQnojQhxMBiiNG4HTwInDwJ2NkBn3yidDTsOaSlpyEqKRqWKjtYW2oBAAGRAdi6PwK2qI7ymirQ6YD41HhcDr0Ma1MrDOjgjsYZzUB2Xz6BoNsWaFGzASo6mqBCBQDqNGhVWgghlHth7NkJAXzzDdClCzB3LjByJGBjo3RUjLE8PMsaGkvIhcHHIXs6fU5EmSvkoosqsFKBKLuI3tSpQLlyysbDQESISIpAaEJo1rlH8Y/w1vwv4DnkL4wbB/ToATRpAljaR6FSeRvUqp19/3WX1mH66OoYPagK+vUjbNy4BpZaT7xR+104m4zFwYPZdUsGLVmGMb2boEljE1SuDJiaAlbW6VDZBaKWeyju35fXXQm9gj6Lv8HXf+5AcnL2c8Wlcj+hEqFTJ6BtWyAqKruSMGOs5CGifA8AqyF7Oa0E8DuAnZCLgX8D0LKg+xfmoVarCXINDwGgUaNG0ahRo3Kds7GxIZKB5zqIiLRaba5zGzZsoNatW+c65+Li8sT9hRBERJQxWpXrMV1cXHKda926NW3YsCHXOS1AlJCQZ0w2NjbG+Zq02qfGVNJe052oO1StWq1c5zSWw2natG2PPX9dklmoeY5zKrK20T3xmtwaTKL//S/3Yw4ZAtqzZ/pjj2lKderqCaj12Hkfat683WPnBpIQj70nwoyu+OmeeE0pupRS99/JaP7fq1bNGF+Td1H+buaDj5JwFHwBUA6AyOP8aACjizPYpk2bktEwGIhefVW+xQsXKh1NqbfpyiaaenAqpenTss71/eM9Qv1N5Fg1NiNRyX0sWCCvMxgM9L+1e6jXsNv0ww9Ef/1FdPYsUWCggRIS5H/KTOnpaRQYOIe8vEzpyBHQiRP29OjR75ScfI/u3ZtLen1S1rWpqaG5YjQYiKKjia7dSKPDR3RZjxsQEUBt+/hSlRrxpNE8GeegQdmP0WhRW0LP92ij1/ms+58PPk/brm+jh3EPC/U9ZY956y35H2TSJKUjeW6c0PBRFg5BRMiPEGIegG8AbAOQCNmk8hcAAsBsIqqT7wMUIg8PD/L2NpKNVdu2yQWFlSoBt29zz6ZCkqRLwv5b+/Eo/hHGNhsLQDYvd5nyDoIv1cPbFSZi91/lAQCrL6zGR13+g8RwB5iYAA0aAI0bExo3FqhfH2jUCLC3f/bnjos7B3//D5CYeBkA4OQ0BLVqfQ+ttsIT1+p0MTh//hXY2LRFnTqroNFYP9Nz6HRyl7C/P3DlCuGcTxp6djfF++/Ln3ecsRj/fPMRABl7q1ZAhNMfOKmZjXkDhmFKq8kAgJCEEFwNuwrPyp6wMeM1H4Xi4kU5F2lqCty6BVStqnREz0wI4UNEHkrHwViRKijjATAHgEWO7w/luO1VnNmX0YzQpKcTNWhABBAtXap0NEbLYDCQf4Q/nXtwLutceGI4YRbI9OP6tGSpnnr2JCpXjnKNaISHZz/GP/8QXbpElJaWxxM8I50ungICPqIjRwQdOQI6fbomRUYeyvc+UVH/0NGjluTj05IMhvQXf/LHHDtG1LMnkaMjPTGS4+CUSvHx8rpVPqsIs0Dv/vlu1n0NBgNFJEYUWixl0rvvyjd7zBilI3ku4BEaPsrAke8uJyGEF+TuJnchRDrkqEwjIcROAGrI0Rr2uD//BK5eBZydgQ8+UDoao5JuSIdapQYA7L+1H29tfAutnFvhxLATAAB7C3t0SFuEfxdNxIQc96tdG+jYEXjzTcDSMvt8hw4vF09aWhh8fDyRmnofgBrOzp/AxWUm1GqLfO9XvnwHNGvmB4NBh8xuISkpQTAYkmBh8eKDmm3ayIMIuHMHOHoU+Pdfedjbm8DKSl5nZWIF+0M7kR5ng0APwMUF8Av3Q8MfG6JLrS7YN3DfC8dQpn3xBbBliyy099lnQOXKSkfEGMtUUMYD4FsAljm+P1RU2VVBh1GM0Oj1RHXrEgFEP/+sdDRGY0/AHmqwogF9cuCTrHNRibFkN7on1Xl7H02dmr2QJS6OqHJl+WF55UqiwMCii8tgMNDlyz3o/PmmFBd34aUex9f3LfLyMqXAwK8pPT21EKOU63NCcyzZ8fenXKM3jRoRvTvWj0wmvkKDtmYvytGn66n35t70w+kfSJeuK9SYSq3//le+qR9/rHQkzww8QsNHGTiedQ3N1wB2AUgD4EhE7kWaZT2FUayh2bQJGDBAfiT29wdMTJSOqMRJ0iXhnzv/oJpNNTSuKIu2eAV6of2v7dG8SnOsbXUGv/4KrF8PBAfL+5QvL5uVa2U5GBDJEiGFjYgQErIW1tYesLJqBECuh1GrraBS5TugmS+DIRUBAaMRErIWAGBp2QBubithY9OiUOJ+XHw8sHMnsGMHsH+//D5TE480bPnDBK6uwMn7J9F6bWu4lnfFzfE3s+rjBEQGoJZdLagEd4R/QuZaGnNz4N49wMFB6YgKxGtoWFnwLL+tlgH4HnJHU0cAqzLaIvxWtKEZISLg22/l7enTOZl5ioWnF6LHHz2w4vyKrHOtnFth0SvnkP7zKdSrJ/t3BgcDNWoAU6YAe/cCanX2YxRVXbrg4KXw9x8Of/8PIHuzAlqt7UslMwCgUpmibt01cHf/B2ZmrkhMvIqLF1vi5s3x0OvjC36A52RtDQwcKGdHwsOBffuA994DrKyAm/4mWTMl9R3rY6brHnzaYmZWMpOkS8KrP7+K6j9UR3xq4cdm9F59FejWDUhOBhYtUjoaxliGfBMaIcT3ACoA+A7AQSHEIADNAVQGYBBCOBd9iEZkzx7gyhU5rz5kiNLRlAhnHpzB+9vfx/Yb27POdXfrjmZVmqGRozsiI+U5rVqLdm6e8PZWoVw5ufTo+HG5QWzePKBFC9movKhVrPg+rKwao2rVCXi2fP/5lC/fAZ6eV+DsPA2ACsHBy3D+fD1EROwq9OfKZGoqC93++qsc5Tp0KHvTnYnBFt+Pfgv/6zYY06fLHVa3o26jgnkFVLauDGvT7N1ZP57/ET4PfVDQqG6ZMGOG/LpsmSy4xxhTXn7zUQBqQ47OfA/gCmQycwNAVwAjAUwuzvmxEr2GxmAgatmSchU4KaPSc+zqWXJmCWEW6D+b/pN1Lj6e6Mcf5Uawli1z33fXLqKkJCo2sbFn6fLlHqTXJ2adM+QsPFOE4uMvkbe3Jx05AjpyBHT16juUkvKoWJ47082bcn1N5lobIYi6dCHaui2dHkSHZF0XmhBKqi9VpJmt4Z1SmTp2lG/arFlKR1Ig8BoaPsrA8WwXAfUA/C/jthsA24xk5z/FGWyJTmiOHpVvZ/nyctVqGbQnYA95/uJJy88tzzr3KP4Rfen1JflH+FNAANGECbm3WTs5EYWFFX+sj2/FDgz8uviDICKDQU/37y+io0ct6cgR0PHjthQcvLLYkioZA9GpU0SDBxOZmmb/t3F2JnqUkV8FxwXT+L3jafiO4bnu+8mBT2jb9W1lc0Fx5r95W1ui2Filo8kXJzR8lIVD8QCe5yjRCU2XLvLtnDlT6UiKVc4/ZJuubCLMArVd2zbXNUFBRH36UEZZf3m0akW0aRNRauFu9nkmERF76NSpahkjI2q6dWtKrhEaJSQnB5Kvb9es0Zq7d79SJI6ICKLvvyeqXZuoefPcVZKjonJfeyX0CmEWyOZbG0pKK8ZhtZKkbVv5P/S33yodSb44oeGjLByKB/A8R4lNaHx85FtpaSn/IpQBXne9qNnKZvSl15dZ55J1ybTedz0lpuVODqKjiaytibRaomHDiC5eLO5opdTUEPLz65eVNJw/3+SltmIXNoPBQCEhG+ns2bqUmhpS8B2KUHo6UUiOEPz85OjNsGFE167JcxGJETT/5Hyac2xO9v0M6TR+73g6FnisWEeZFHPwoPy3b29PlKhsUpwfTmj4KAuH4gE8z1FiE5p33iFjq0vxsv698y9hFqje8nq5/nAZDETbtxO9/TZRcnL29bt3Ez14oECgJBOFhw9X0/Hj5enIEdDRoxZ0//4CSi+h0yQ5Kwunp6eRn19/io09o2BERMuXZ4+wCUHUt292YpPT/pv7CbNAzgudy8Y0lMFA5Okp35jlywu+XiGc0PBRFg7FA3ieo0QmNP7+8je8VivnVkqhezH3aPiO4fTx/uyEzWAw0MbLG7NGYwwGov37iTw8KGtaaeVKpSLOlpgYQBcvts8albl0qRMlJd1ROqxnFhS0NKPdgqviCdjNm0SjRhGZmFBWYjNwoPwnkCk4Lphm/Dsj1zqqFF0KLT6zmGJTSvY6kxe2ZYt8Q1xdZWHNEogTGj7KwqF4AM9zlMiEZvhw+TaOGKF0JEXGN8SXMAtkPcf6iekkIqLjx7OXEgBEFSsSLV6s7Ah8erqOAgPn0NGjZlldsUNC1hvdNIhen0i3bk2jyMgDWecMBmX/aAYFEY0eLXN4gGjIkPyvX31hNWEWqNXqVsUSX7HT64lq1JBvxl9/KR1Nnjih4aMsHFwG9GWEhAC//y6rvE2dqnQ0heZ00GksOp1dMKyRUyMs7rIY3iO9YaHN3cNozBjZW+jYMcDOThbEu30bmDABsMi/3VGRCw//CwZDCpyc3oOn53U4OQ3MKh5nLNRqC7i6zoWdXaesc7duTYSfX1+kpoYoElPVqsCKFcDNm7Je0OefZ//s+nVZyC+nWna18Hr11/Fh0w+zziWmJSIoNqiYIi5iajUwaZK8PX++zOsZY8WvqDIlAKsBnAYwo4DrnABcfJbHLHEjNJ9/TgTI9selREh8CGlma0j1pYpuRd4q8Pr164msrOTmrpiYoo8vPzpdPKWlZS/Kjou7SJGRBxWMqPClpobRsWPWWVu8Hz5cVWJGndLTiZo0kdvyv/su9xoqotz1feYen0smX5nQ4jOLiznKIpKQQGRnJ38fHD+udDRPAI/Q8FEGjiIZoRFC9AagJqLXANQUQtTO5/IFMMau3cnJwI8/ytuZn86MVM5Pyk5WThjnOQ6ftvoUtma2ua5LSgK++gqYNSv7XL9+srrsrFmAjU3xxJuXuLizOH++PgICRmWds7ZuDDu7jsoFVQRMTBzg6XkFdnZdodfHwN9/BHx930BSUoDSoSEmBnB0BOLigGnTgLp1gT/+yB6wyDk6dj/2PtLS01DXvq5C0RYyS0s5XAnIURrGWPEriiwJwBIAb2Xc7gdg6FOuewPATwC88nmskQC8AXhXq1aNSoxffiECiJo2zV2sw8iM2jWKVF+q6OyDs0+9xmAg2rhRFloD5KLQR8Vb0LZAycn36OhRSzp/vgnpdKW/sGHmFu8TJxzoyBEUWRfvF3HgAFHDhpS1pqp5c6IzeWzS8o/wzzVqM9trNn3272fGu3g4JCS7MmHOldIlAHiEho8ycBTVGhpLABl9khEFOa2UixDCBMDnAD7N74GI6Bci8iAiD4eS0tWWKLsp3aRJRdcpsRjYmNlAJVTwfph3F/NLl4BWrWQD8aAgoHFj4OBBoGLFYg70MUSEiIgdIDIAAMzMquHVV4+hSZOz0GisC7i38RNCwMmpP5o1u46KFd8HUSru3p0BH5+miIs7q2hsnTrJhtQrV8r/T86eBbp2BRITc1/nVsEta9QmJiUGc0/OxTfHv8HVsKsKRF0InJyAQYPk7WXLlI2FsTKoqBKaBGRPI1k95Xk+BbCCiGKKKIaic+CAXP1YpQrwzjtKR/PMdOk6LD27FCfun8g6N63VNPiP88cYzzG5rtXrgU8+ATw8gNOn5e/q1asBb2/g9deLO/LckpJuwdf3TVy92hMPH/6Udd7auslLd8U2NlptBdStuzZXF+8LF17DzZsTiqSL97NSq4ERI+TC4WnTgLlz5awMAKSnAwZD7uttzWxxaPAhfNnuS7R0bpl1/lbUrWKMuhCMHy+/rl0LxMYqGwtjZUxRJTQ+AFpn3HYHEJjHNW8CGCuE8ALQWAixqohiKXyZozPjxwNarbKxPIcfvX/EhP0TMH7feKQb0gEA5c3Lo2b5mk9cq1YDN27IwaiPPgICAoBhw+R5pRgMOty7Nxfe3g0RE3MYWq09tFp75QIqQWQX78s5ungvxfnz9RETc1zRuKysZDIzcmT2uUWLgLZtgcuXc1/b0rklvnj9i6zvb0beRL3l9dB9U3foDfpiivglubvLjD8hAVi3TuloGCtTiiqh2Q5gsBBiIYB3AfgJIb7OeQERtSWidkTUDsAlIhpRRLEULn9/Oedibi73rJZwOf8QjGgyAu1d2uPLdl9CJZ78T3//PnAr4wOxEMDy5cC5c8APPwDlyhVXxHmLizsPHx9P3L07PWMr9mB4el6Ho+O7ygZWgmRu8W7a1BvW1h5ISwuBVmundFi56PXATz8BJ08CTZrI0Zvk5Lyv9Qv3g5nGDA4WDtAY08jbRx/Jr0uXPjkUxRgrOkW1OAdAechkpmJhPWaJ2LY9YQIRQPTBB0pHkq8UXQrNOjKLXv3pVUrTp+V7bXo60dKlshVVq1by+5Iiuyu2KqNibo1cReZY3tLTdRQTcyrre4PBQBERe0vEFu/oaKLx44lUKvlPyc2N6MSJvK8NTQilsITsduz+Ef60/fr2Yor0Bel0RNWryxe3e7fS0RAR8aJgPsrEUWSF9Ygomoi2EJEy1b+KQs5h5LFjFQ2lIAYy4LfLv+FiyEUcCTzy1Ovu3gU6dJCzZ4mJQKVKTy7eVEpk5F6cP18fwcGLAQg4O0/J2LLcqcD7lnUqlQY2Nq9lfR8evgVXcot9GQAAIABJREFUrrwFP7/eCkYl2doCS5YAp04B9erJ6cw2bYCJE4GUlNzXOlo6wsFSbgYgIozeMxo9N/fEsnMleNGtRpP9+2HxYmVjYawM4UrBz2P9ellko1UrOVdewkQnR0OXrgMAmGvNsa7HOngN8UIn1ycTAINBltFp2BDw8gIcHIC//wb+/BOwVniTUFpaGK5d648rV95Gaup9WFk1QdOm5+HqOg9qtaWywRkpIUyg1drDzq6r0qFkad4cuHAB+OwzQKWSu6HyW5JGIPSq2ws1y9dE/wb9iy/QFzF8uJyWPnRIbiBgjBU9pYeInudQdMrJYCBq0IAIkEVZSphd/rvIab4TfXfiuwKvNRiIunWjrDoh775LFBZW4N2KhcFgoHPnGhlFV2xjk5YWmauTd0jIesW7eGe6cIHoxo3s7yMjiZKS8r42Zxdvg8FAH+//mC6HXC7iCF/ABx/If2ATJyodCU858VEmDh6heVbHjwNXr8r9y//9r9LRPEGr0iI0MRSH7x4GUf69ZIQA2rUD7O2BLVuAzZvlCE1JIIRAjRqzUb58J3h6XoWz8ydlbit2UdFq7SAyFoMnJ9+Fv//IjC3eHym6xRsAXn0VqFNH3iYChgyRJQMuXXry2pwLhNdfXo9FZxah8/rOSNWnFlO0z+jDjN5V69Y9feUzY6zQcELzrJYvl19HjgRMTJSNJcP92PtZtzvX6ox/Bv+DvQP35tmAMSZGrlnINHGiHAlXuoxO5lbsu3ezt+va2/dAo0b7YW5eQ8HISjcTEydUqTIOcov3Epw/Xx8REbuVDguAbG558yZw7RrQrBmwYMHTNwv1rNsTo5qOwvedvoepxrR4Ay1I06aAp6f8x7dli9LRMFbqiYI+zZckHh4e5O2dd0XbIhUaKlsMEwGBgfK2gnTpOgzfORx/X/8bvqN8UcuuVr7XnzwJDBwo63z5+gLVqhVToM8gPv4ifHw8AAi0aHEbZmbVlQ6pTImPvwh//w+QkOADAHBw6IvatRfDxOSJ4t7FKikJmDw5u13aG28Av/76bP/0/r72N+7H3sdHLT7KszxBsVqzRq6nadFCVqhUiBDCh4g8FAuAsWLAIzTP4tdfZQGNbt0UT2YAQKvWQm/Qg4jgG+L71Ov0emD2bFnE7N49oFYteU5pBkP21IC19auoWXMOGjXay8mMAqytX0WTJmfg6vo9VCoLhIdvxrlzdfHo0eoCpy6LkoUFsGIFsHOnnA49fBho1AjYujX/+8WkxOCDXR9g0sFJ2Om/s3iCzU/fvrJr65kzec+fMcYKDSc0BSECVmUUMVawkF66IR2xKdml1Je9tQwXP7yI/9bLez1PUBDQvj0wc6Z8CdOmyZGamk8WBS5WkZF7cfasGyIj92Wdq1ZtGm/FVpBKpYGz8yR4evrBzq7LY128byoaW/fuwJUrshdUdDRw4kT+19ua2WJdz3V4v/H76FGnR/EEmR9LS+C99+Ttn39WNhbGSjmeciqIl5fMDKpUkcMcCtT+D44LxoCtA2CuMcfegXsLHEb/91/5wTAyUtaV+f13WWtGSWlpYbh16yOEhf0BALC374UGDQr4uM2KHREhLGwTbt2aCJ0uHEKYwsXlCzg7T4ZKpdzaMSJg0ya55itza7fBILd7FyQ6ORqLzizCZ20+U2adjZ8f0KCB7APx8KEidRF4yomVBTxCU5CVK+VXhRsZ+YX54VLIJdyLuVfgtRYWcr1M166yX46SyQwR4dGjtTh3ri7Cwv6ASmUOV9cFqFePF0mWRLKL9wA0a3YdTk5DILt4f4bY2FMF37lI45Id3zOTmchIueZ2z56C7zty90h8dewrjN2rUDHM+vWB1q1lYc7Nm5WJgbEygEdo8hMVBVSuDKSlyZK61YtvjQcR5dqtdCroFGrZ1YKjpWOe16ekAGZm2d+fOye3vT7LJ9iikpR0CwEBHyIm5jAAoHz5TnBz+4l3LxmRqKh/EBNzGDVrzsk6ZzDooFIp25T1m2/w//buPC7qan/8+OuwCQgqCG7pdcOFUnLD1NRsccvsqm2maeXtm1l52291s0frbbv9vFlds13NzK6ZWuaWmtmioliKoihKmqiAICL7Muf3xxk2HWCAmUGY9/Px8DELZ+ZzPqHTe87nvN9vZs0y9596Cl56yRTotWVH4g6mr5rOsluX0TGojv7uLVgAd90FgwaZa78uJis0wh3ICk1lFi2CvDwYMcKlwUxqdirXL76eJXuXlDw3qN2gCoOZqCjo3h1WrCh9rn//ugtmzu+K7eXVnO7dP5NU7HooOPi6csHM2bNb2b69C6mpdiyNONHTT5su3p6e5vbaayE52fbYyEsiib43ulwws+rgKtd28L75ZnPJ6ddfTRt7IYTDSUBTEa1LLze5eDPwyriVrI1fy1MbniK/KL/Sse+/b1azjx41XYzresHNVlfs/v0P0KrVHTbr44j65cSJueTlHeXs2Sp25zqZh4fZ6L5pk9kntmWLWZHctcv2+LJ/95bFLmPsF2O58YsbsWgXdcNu3NhsbIPSfnBCCIeSgKYi0dGmMnBoqEm1cKG7e93NS1e/xJa7t+DjaXsjZkEB3H8/3HefuT9zpklxrcuY4ciRWezaNYCsrN34+nYkImId4eEL8fEJqbtJCYfq1u1TunadR/v2pYUQc3OP1lmK99Ch5p/qwIEms2/wYHNbmdDGoYT6hzKy80jX1qmZNs3cFpeBEEI4lNSUr8jCheZ28mSnVwa2aAtvbXuLOy+/k+b+zVFKMWvorArHnz5tsj02b4ZGjcxC0pQpTp2iXby9TeDSrt3jdOjwvDSSbIA8PLxo02Z6yeOCgnR27RqIv393unZ9H3//Li6fU+vW8MMPpsF18+bQrl3l44e2H0rsA7E092te8lx2QTb+3v7OnejAgaa/Q1wcrFsHY8Y493hCuBlZobElP9/kiEJpDQknenbTszy2/jEmLptY5TddrWH8eBPMtGoFP/5Yd8FMfn4yaWkbSh63bTuTfv1207nzvyWYcRM5OXFoXUB6+g/s2NGTo0dfwWIpcPk8igP7V18tfS421tSusSXEP6TkMtTp7NP0fK8nr/z0inNXmpSCu+829z/5xHnHEcJNSUBjy9q1ZhmkRw/o1cvph5sROYPuId15fODjVe4zUQpmz4YhQ2DnTrjiCqdPz6bc3D+Jigpn374J5OUlWufmSUBAj7qZkKgTTZpcQf/+B8qleEdH9yUjY7vL56JU6Ub4pCQYOdJsjo+Lq/x1G45sIOFMAsv2LyO3MNe5k5w61exk/uYb07RKCOEwEtDYsmCBuZ061WmbUlKzU0vut23Slr0z9jIybKTNsVqbZt/FIiPNyswllzhlanZp1KgtTZsOpkmTAWhXbawUFyVv7+aEh88nImI9vr6dyMqKqfMu3vn5ppt8fLy50rNlS8VjJ/aYyMqJK1l1+yr8vP2cO7HWrWHUKLOHZsmSqscLIewmAc350tLg22/NV73Jk51yiM1/bCbsnTAW/L6g5DlPD9tF+woKTIPvoUPL1+Ry9eZfi6WAY8deJzNzj/X4iksvXUxExDp8favYtCDcQnDwcCIjY2jX7h+U7eJdFyne7dqZLwFjx5rLTtddZypmV2Rst7G0Dmxd8vi/Uf/leMZx50zujjvM7eefO+f9hXBTEtCc78svTRQxfLgpqucEe5P3kp6bztrDayu9Zp+RYT6QP/oI/PzMPoG6kJGxk+joSI4ceYq4uHtL5uzp2VhSsUU5np7+dO78On377iAgoC95eX8SE3MD+/ZNJD8/yaVzCQiA5cvhoYfMP+mpU+H556subbA4ZjEPrnmQKz+5kqz8LMdP7MYbzeS2bzdLSEIIh5CA5nzF2U1O3Az8YP8HWTlxJYvGL6owIDh+3OyTWbfOZI7/8AOMG+e0KdlUWJhJfPyj7Np1RUkqdseOL0oQI6pUURfv7OwqNrQ4mKcnvPUWvP22WXR94QXYurXy14wKG8XQ9kN57qrnaOzjhM3t/v5mZz+UJh8IIWpNWh+UFR8PXbqYb09JSeaDxwG01vx3x3+Z2GMiIf5V12TZsweuvx4SE02W5+rVru+SnZq6hoMHZ5CXdxTwoF27RyUVW9RITk4CBw/OwGLJplevzShX1n4p47vvTObTE09UPdaiLeVq1BRaCvHycGCVi3XrzF6abt1g/36nX0OW1gfCHcgKTVnFm1TGj3dYMAMwe+tsZq6ZyfWfX0+RpajSsRaLacKXmGhWaH791bXBTH5+MrGxk4iJuZ68vKMEBPSmb98dkootaszPryMREWvo2fPbkmAmJyeBo0dfc2mK95gx5YOZmBjz78yWssFMYkYiPd/ryfL9yx03mWuvhRYtTApWReWNhRDVIgFNWcVZBxMnOvRtJ/WcxKWhl/LklU9WuPm3mIeHWYW+5x5Yvx6Cgx06lQqZrtjziYoKJzn5Czw8/OjU6d/06RNFYGAf10xCNFhKKby8mpY8PnTofhISniYhoeICks505IjZJjdoUNVp3Yv2LOLA6QO8ufVNx7VK8PIqbYUgm4OFcAi55FRs3z5TdyYoCE6dqnV14PO7ZVe1ZB0dDX371uqQNWa6Yt9HevpGAIKChlu7Yrv4OpdwG2lp35OQ8E969lyFj09Llx8/NRVuuAG2bTPVhVevNjVrbNFa827Uu0zqOYnm/s1tD6qJ7dthwACTyv3nn2bDj5PIJSfhDmSFpljx5aYJE2odzBRaCrl92e3M2zmv5LmKghmtzUbFfv1Mo8m6cOLEe6SnbyzTFXudBDPCqYKDh9OnT1RJMGOxFBAT81dSU1e75PjNm8OGDWavWmoqXHONWRG1RSnFzCtmlgtmYpJiaj+J/v2hc2c4edKU/hZC1IoENGCiiuKAxgGXm9bFr+PLfV/y9ManSctJq3CcxQJ//7tJJfXwcOoXtAsUFWWX3O/Q4XkuueQh6YotXKrs37OkpIWkpn5DTMwYYmNvd0mKd+PGsGKFSWjMyjJ7bBYvrvp1r/z0CpfPu5z5v8+v3QSUgttvN/eXLq3dewkhJKABYPduOHjQ5EcPG1brtxvTdQzvjn6X7yZ9R7Cf7U0w+fmmvta775oFoaVLzb4ZZysqyiU+/lF27OhJYWEmAF5egXTp8pZ0xRZ1pmXLO+nc+U08PPxJTl5CVFQ4J09+4vQu3t7e8Omn8PjjpnjvlClV76nxVOabh8IBgf/NN5vb5cuhqPKEASFE5aTbNpRuBr75ZrNZrwa01mTmZxLYKBCAB/o/UOHYnBy46SZYs8ZkiK9caZa8XUEpL9LTN5Ob+wfp6T8QEjLWNQcWohIeHl60a/cYISETOHhwBmfOrCMu7m8kJS1yehdvDw/4979N0lFAgMmkrsyTg59kTNcx9GjhgL5lEREQFmZKRvz8M1x1Ve3fUwg3JSs0ZS83FWcdVPstNI+se4TBnw4mJavqhnP33muCmZAQUzDP2cFMfn4y+fnJgPkfR/fu8+nbd4cEM+KiU5ziHR6+CG/vkDJdvF91eor3E0/AjBmlj0+dqriqcNlgJjEjkY1HNtbsoEqVrtJ89VXN3kMIAUhAY9KL/vjDZBoMHlyjtziTe4bVh1azP2U/MclVbxZ89lno3ds0mOznxLyDsqnYhw7NLHk+ICBCUrHFRUspRcuWk4mM3E/LllOtXbz/6dIu3rGx0LMnPPVU5a0SkrOSufKTK7nhixvY+mcVJYgrctNN5nbZMrOxTghRI04LaJRSHyultiqlbBaaUEo1VUqtUUqtV0otV0rVLrWoplasMLcTJtR4V26wXzC/TPuF1ZNXc01H28st+fml97t2NXHUpZfW6HB2yck5zO7dw4mLu5vCwjQKC89QVJTjvAMK4WA+PiGEhy+w2cW7qMgJPZbKiIuD9HR44w2zcb+iOCPUP5ThnYZzecvL6dq8a80O1rcvtG9vsp22bav5pIVwc04JaJRSEwBPrfVAoJNSytYF8MnAbK31COAUMMoZc6lScUDz179W+6WnMk+V3A9tHMp1na6zOS411RTwmjOn9DlnJRIVd8XesaNHmVTshURErMPT0885BxXCiUq7eD8BeFi7dzt3cXn8ePj6a7Nh/9134f/+z/aeXaUU826Yx8apG2teo0YuOwnhEM76VBgG/M96fz1wwbUcrfVcrfX31oehQLKT5lKxQ4dMQb2mTau9Ge+XY7/Q+e3OvL397UrHJSebPTLR0eaDMTu70uG1UrYrtsWSS8uWd9C//35atZoiqdiiXjNdvN+gb98dhId/VhKcFxaedVqK99ixsGqV6XT/yScwbZrtoMbTw7NcE8t5O+eRlFnNOZW97FSPip0KcTFxVkDTGCjukpIGVFgKVCk1EAjSWttca1VK3auU2qmU2pmSUvWG22pZudLcjhlT7WJ6u07uIrsgm73JeytMLU1KMlnge/aYzIkff3Roi6gSRUVZ53XF7kBExFrCwz/DxyfU8QcUoo4EBvamadOBJY+PHHmKqKhwTp9e5ZTjDR8Oa9eamjULF5qVmsrijbk75jLjuxmM+3JclX3byrniCrjkEjh2DJzZgFeIBsxZAU0mUHx9I6Ci4yilgoF3gGkVvZHW+gOtdT+tdb/QUAf/z7n4ctO4cdV+6cwrZrJhygbmjplrc/UjJcX0n9u/Hy67zAQzbdrUdsIXSk1dS1TUZRw//h8A2rV7nMjIvQQHj3T8wYS4iFgsheTmHqWoKBNf3w5OO87QoaZTd0CAuXRc2WLnhPAJdAnuwgORD1TZt60cDw+zjw9MTRohRLU5pZeTUmoq0EJr/aZS6gUgTmu9+LwxPsAa4LUyl54q5dBeTklJJrPJ2xtOn4bAwCpfkleYR15RHk0aNal0XHEp9T17zMbfH34wNS4c7fjxOcTHPwxAQEBvunX7kMDAOmoIJUQd0FqTlRVDQEBEyeOUlP8REjIBDw9vhx4rOdm+f8f5Rfn4eNYgx2HDBrMkFBFhin06kPRyEu7AWSs0K4ApSqnZwK3APqXUy+eN+RvQB3hGKbVZKVWzIjA1tWqVWTu+7jq7ghmtNTO+m8HAjwdyOO1wpWPT0kyM1K0bbNzonGAGICRkAt7eLenU6Q1rV2wJZoR7UUqVBDMAKSlLiY2dSHR0PzIyohx6rLL/jmNi4MknbWc/lQ1mjp09xjdx39h3gKFDzTLQnj3m0pMQolqcEtBorTMwG4O3AVdrrXdrrWedN+Y9rXWQ1nqY9c+XzphLhap5uels3lm2Hd9GwpkE0nPTKx3bpYu5xLRpE7RqVduJlsrJOUx8/CNoba7N+/q2Y8CABP7ylyfwqKSTtxDuwts7FF/fjmRl7WHXrgEcOvRwSYsPR8nLM9vu3ngDHnyw4j01yVnJXPHRFdyy9BZ+/fPXqt/YxwdGjDD3V7umSacQDYnTch+11me01v/TWp+qerSLZWbC99+bi+Fj7auW28y3Gdvu2caayWvo2+bClZBz50oLDoOpZu7IPTNaF7FnzyiOH3+LEydK23JLKrYQpYKCriYycm9Jindi4hx27LjMoV28GzWCjz4yt++9Bw8/bDuoadG4BbdcegtD2w+1v0bNDTeY21XO2eQsREPmlD00zuKwPTQrV5qVmQEDYGvl1T3zCvNo5NWo0jFZWTB6NPz0E8ybB9On136KxbTWJZuOU1JWkJLyFWFh/5HsJSGqcO7cb8TF3UNm5i4AWrSYSFjYW/j4VJh0WS1r15ryVfn5pvr3iy9eOKbQUgiAl70rqElJZlnX19dsxnNQWqTsoRHuwD1bH6xda26vv77SYVn5WfT/qD8v/vgiFm27VGhenklO+Oknk3V5ne3aetVWnIqdkPBMyXOhoeO49NJFEswIYYfAwN706bPdRhfvTx3SxXvUKNPX1tMTXnrJNLg8n5eHV0kwo7Vm8x+bK3/Tli0hMhJyc801ayGE3dwvoNEa1q0z90dWntr8/ZHviUmKYXHMYrILLqyIV1QEd9wB69dDaKjZANy5c+2nWDYV+88/Z5OXd/FdtROiPiju4h0ZuZegoBEUFp4hLm4au3dfS3b2oVq///jx8Omn5v6TT5o6nRWZvmo6Vy+4mvm/z6/8TYsvO333Xa3nJ4Q7cb+AJj4eEhIgONj0UKnEuO7jWHvHWr669SsCfALK/Uxrc2npq6+gSRMTI3XrVrup5eenEBs7mZiY0eTlHSUgoDd9+vxCo0YO3FkshBsyXbzX0r37ZyVdvH//fRgWS37VL67ClCkwdy7Mn29qTlVkQNsBNPZuXHVKd9l9NPVoS4AQdc39UmOKLzeNGGFXM8oRnUfYfP6ll+Djj01Z9O++M92za0prTVLSQuLjH6WwMA0PDz86dHiBtm0fkewlIRxEKUWrVncQHDyKw4cfo1mzq/DwcExP3Bkzyj/OyzObhsua1nsao8NG0zqwdeVv1ru3ySg4ftykcF9+uUPmKERD534rNFVcbsouyObWpbcSmxJb6dvcfrtJz162DAZf0KnKfjk5h9mzZwQHDtxFYWEaQUHXERkZI6nYQjhJcRfv1q1LC5QfO/amw1K8f/vNZDna2gJTNpjJyMuw/QZKle7vk8tOQtjNvQKavDxTthdK6z2c57WfX2Np7FKmLp9a6cbBLl3M9fLRo2s2FYulkGPH3mDHjp6cObMBL69gundfQETEevz8HLARRwhhl4KCdI4efYHExDlkZNhsKVctS5aYxZVx40xwY8va+LWEvR3G0n1LbQ8YNcrcfm9XEXUhBO52yennn02764iICovEPDHoCU5lnuL+yPsv6NG0ZAmcPAmPPGIee9ewsnpm5h4OHLiLzEzzadeixWRJxRaijnh7N6NXry2kpq4iOLg0TbGoKBtPz+qnTb/6Kvz5J3zxhfnC8+uv0KlT+TGH0w6Tkp3C4r2LueWyWy58k2uuMf2dfvnF1IVo3PjCMUKIctwroLEjuymwUSAfjP3gguc3bYKpU6GgAPr1gyFDaj4NrQvIzDRdsbt2nSeNJIWoY4GBvQkMLN0Id/bsNvbuHUunTm/QqtVdNhvQVsTDw2wQTkkx7ZlGjjRxSdnWCfdH3k/rwNaM615BpfKgIPNBExUFW7bUfClYCDfiXpecKghotNasOLCCIkuRzZft2WPSMwsK4KGHarZn5ty50rXnwMC+9OixXLpiC3GRSk5eTEHBaWuK93VkZ8dX6/U+PvD119Cnj0msHDPGFCgvppRiQvgEPFQlH8HDh5tbuewkhF3cJ6A5ccJEJv7+F0QkX+z9gvFfjmfsF2Mv2Ddz7Jj5cpSRAbfcArNnmz171REXdx/R0X04fbq0nHlIyI14esoyshAXo7CwOWVSvDexc2dPjh59DYulwO73CAw0LZk6dYLo6Irr5J3NPct9q+67sOltcUCzfn0Nz0II9+I+AU3xp8mwYRfkUwb5BtE6oDU3hd9Ubmk5Lc3szTtxAq66ChYuNMvJ1eXv3x0PDz/y86VAnhD1QXGKd2Tkflq2nILFkktCwtPV7uLdsqVZGP76a7jxRttjZm2axfvR7zN91Xk9UwYONF/A9u0zLRGEEJVyn4Bm82Zze/XVF/xodJfRHHjwANN6Tyv3/PTpsH+/KZa1YoVpr2KPnJzDpKaWplu2bTuTyMhY2rS5p6azF0LUAZPivZCIiHVlungPrFaKd1iYyXgqlppa/ufPD3ue8d3HM2fUnPMPDldeae7/+GMtzkII9+B+Ac2wYSVPle3P1KRRkws2/r3xBlx7LaxZA82aVX2IsqnYsbGTyMtLBEApT/z8OtTyBIQQdSU4eASRkTHWLt6qxl28f/4ZunY1TWyLNfdvzte3fc1lLWyUGS7+vJKARogquUdAc/w4HD5sLmr36gWYxpO95vXine3vVLgZuGNHk6XQrl3Vhzh3LppduyI5cuRJLJYcmjcfi1KVd+kWQtQfnp6N6dz5Dfr23UFAQB/y8o4REzOG/fsrr1lVVny8uZT9wAPmi5LNMWllNiBfdZW5Lf5CJoSokHsENMXfboYMAS+Tqb5k7xJikmOYv3t+uaFz58Lrr9vfQsV0xX6M6Oj+ZGb+jq9vByIi1lq7Yoc48CSEEBeD87t4N2r0F7vTuu+6C555BiwWuPVW2L27/M8fXfcoXd/pysYjG80TkZGmv0psLCQnO/ZEhGhg3KMOTfG3m+JvO5i+Ks39m9MmsA2eHqan0+rVMHOm+bAZMgQGDar8bdPS1nHw4H3k5v4BeNC27aN07PiiZC8J0cAVd/EOCZmAj09pO4MzZzbTqFFb/P3DKnztSy/BkSOm8N6YMbB9O1xyiflZiH8Inh6exKbEcm2na0v30WzYYOrR3Hyzs09NiHrLPQKa4hWaMvtnlFLlilrt2QO33WaCmWefrTyYyc9PIT7+EZKTPwcgIKAXXbt+SJMm/ZwxeyHERcrPr2PJ/YKCM8TGTqSo6Cy9e28lMLCXzdcoBZ98YqoJ//yzaa69ZYu5Iv74oMcZ33084aHhpS+46ioT0GzeLAGNEJVo+AGN1vDii/DTT9CnD9EnomkT2KZck7iTJ82HSmYmTJwIL7xQ0VtpkpI+s3bFTsXDw7dMV+wa9kEQQjQQmuDgEeTmJhAQEFHpSF9fWL7cZGbHxJjAZvRo8PH0KR/MgPlwysoyt0KICil7N7NdDPr166d37txZ49cXWgrpMbcHJ86d4Ic7f6Bvm75kZ5svQDt3mg+XTZsqTs9OT9/C77+by1bNml1Lt27vSyNJIUQ5RUW5eHqaD5GcnD9ITHyXDh2ex8sr4IKxhw5BQoLtXrm/HPuFPUl7mBE5o9ZzUkpFa61lCVk0aA1/haaM9Nx0woLDKLAUENHSfIN67DETzHTsCCtXXhjMaK1LNvw1azaU1q3voWnTwbRsObVa/V2EEO6hOJgBiI+fSWrqKlJSltK163s0b359ubFdupg/xTIzISAAEs4kMOTTIXh7ejMybCSdgs7rbimEuIB7ZDlZhfiHsGrSKqIlnNBuAAAKdUlEQVTvjcbb01wieuYZs7Vm1SoIPa/ZtUnFvoJz534vea5btw9p1epOCWaEEFXq0OEFAgJ6l6R4x8beTn6+7Wyl9evNF6tNm6BjUEem953OPwb9g1D/UJvjhRDludUlp+o6dOghEhPfJiRkAj16LHPZcYUQDYfFUkhi4hwSEp7FYsnByyuIzp3/3wVdvJ9+Gl57zTTajooyFYYdRS45CXfgFis0OQU5PLz2Yf5I/wOAHTvgX/+yXWumoCC95H7Hji/Tvv1zhIcvdNFMhRANTXGKd2TkPoKCRlBYeMZmF++XXzb7fs+cMX2fzp4tfY/69MVTiLriFgHNvJ3zmLN9Drd9dRsnT5q+KrNmwYcflo7Jz08hNvYOoqN7U1SUBYCXVyAdOz4vdWWEELXm59eRiIi1dO/+GV5ezS/o4u3pCZ9/bnrH7d8PkyZBURGsPrSayA8j2X1qd9UHEcKNuUVAc2O3G5kSMYWnB7zA+PGme/bgwaZqp9aaU6cWEhUVTnLy5+Tnn6pWN10hhLBXcRfv/v0PnNfFO5KMjB00aQLffAPNm5tCn089BVGJUYztOpb2zdrX9fSFuKi5zR4areHuu2HBAtObaedOCAw8wsGD93HmzPeApGILIVwrLW29tdp4Ai1b3kF4+GeAqaE3fLgpwhcbW/v9NLKHRrgDt0nbfustE8z4+8PKlYXk5v6HAwees27SCyYsbLakYgshXKq4i/fRo6/Stu1DJc8PHnyOjz4KpHNnx24OFqIhc4uAZsMGePxxc3/Rol0UFd3DkSO/AdCixSTCwv6Dj0+LOpyhEMJdeXo2plOnl0seWyz5/PbbICIje9Kly3+BoLqbnBD1iFsENJddBldemcU99zxHUNB/yMy00KhRe2uhq9F1PT0hhChx7twucnIOU1SUg4dHBWXLhRAXcIuAplmzBF5//Rry8v7AdMV+hA4dXrRZilwIIepS06YDiIzcS0FBKp6efgAUFWXh4eGLUp51PDshLl5OC2iUUh8DlwLfaa1frukYR/D1/Qs+PiF4eTWlW7cPadIk0lmHEkKIWvPz64SfX2m7g4KC0/j6SpaTEJVxStq2UmoC4Km1Hgh0Ukp1qckYx83Hkx49VtK37w4JZoQQ9YrWFry9W9b1NIS46DlrhWYY8D/r/fXAYOBQDcaglLoXuNf6MFMpFVeNeYQAp6sxvqGQ83Yv7nre4L7nXt3zluUd0eA5K6BpDCRa76cBfWo4Bq31B8AHNZmEUmqnO9ZekPN2L+563uC+5+6u5y1EZZxVKTgT8LPeD6jgOPaMEUIIIYSokrOCiGjMJSSAy4E/ajhGCCGEEKJKzrrktAL4SSnVBhgNTFRKvay1nlXJmAFOmEeNLlU1AHLe7sVdzxvc99zd9byFqJDTejkppYKA4cAWrfWpmo4RQgghhKhKvWpOKYQQQghhi2zEFUIIIUS91yACGqXUx0qprUqpWbUZU99UdU5KqaZKqTVKqfVKqeVKKR9Xz9EZ7P1dKqVaKqV+c9W8nK0a5z1XKTXWVfNyNjv+ngcppVYrpXYqpd539fycyfp3+KdKfu6tlPpWKfWLUmqaK+cmxMWm3gc0F1tVYlex85wmA7O11iOAU8AoV87RGar5u3yT0tIA9Zq9562UGgK00lp/69IJOomd5z0F+NxalyVQKdUg6rNY9xguwNTsqshMIFprfSVws1Iq0CWTE+IiVO8DGmxXHK7JmPpmGFWck9Z6rtb6e+vDUCDZNVNzqmHY8btUSl0DZGECuYZgGFWct1LKG/gQ+EMp9VfXTc2phlH17zsV6KGUaga0A/50zdScrgi4DcioZMwwSv/7bAEaRDAnRE00hIDm/IrDtpqe2DOmvrH7nJRSA4EgrfU2V0zMyao8b+ultWeBp1w4L2ez5/c9FYgF3gD6K6VmumhuzmTPef+MKe3/d2C/dVy9p7XO0FqfrWJYQ/xsE6JGGkJA465Vie06J6VUMPAO0FCur9tz3k8Bc7XW6S6blfPZc969gQ+sJRAWAVe7aG7OZM95Pwfcp7V+ETgA3O2iuV0MGuJnmxA10hD+8rtrVeIqz8m6UrEUeFprfdR1U3Mqe36X1wEPKKU2A72UUh+5ZmpOZc95xwOdrPf7AQ3hd27PeQcBPZVSnsAVgDvVomiIn21C1Ei9r0OjlGoC/ARsxFqVGLilbFViG2MG2LGUe1Gz87xnAK8Au61Pvae1/tLVc3Uke877vPGbtdbDXDdD57Dz9x0IfIK57OAN3Ky1TrTxdvWGnefdH/gUc9lpKzBea51ZB9N1iuK/w9Z9YZdqrd8t87P2wGpgAzAI89lWVEdTFaJO1fuABty3KnFDPCd7yHnLeYtS1vYxg4F19f2LmhC10SACGiGEEEK4t4awh0YIIYQQbk4CGiGEEELUexLQCOFASikPpZSq6LGN8b5l7vtYM3WEEEJUk+yhEW5HKfVP4BegO6Z2y17gFky6rwLGA+e01gXW8Q8BSVrrJdbHXlrrwgre+05gNhADBAIhmAycJoAFyLDWSykeHw3cBZzD1AryBt7HlPs/7NATF0KIBkxWaIRbUUp5AYXWP9cAXwB/Aa7FVFq9BjgD/KqU2mKtZfMQcJ9SarNS6kdgq1LKz/p+5ZoHaq0XAFutqeLTMcFMHKYFw1vW9y+eyzBgG9ANuBkYCLS23r/ZOf8FhBCiYfKq6wkI4WI3APcCY4AkTJuAA8CrmFWRIgCl1FogCrPC0hk4gukRdAnQWWudU1nzQGsgFAh8CxwHOmICpbPWn3tYj7kA+BV40HqcFkAH4AFHn7gQQjRkskIj3IrWegWm3887mEtAkzGXmtoATZRSA5VSAZiChPHADMwlqL9iCrxlAM9b367C5oFlVmgAjmGaJvajtMjhY5gKt2D+HWZhLntNtx63QXQJF0IIV5EVGuFWrJtwh2JWQw4AHwFrMKssYcAQTPn4Vphg5Ungb5h9LR8C6UAz4BOtdYb1PW0dZwNmhWaN1vqoUioMExh9ZR2yBTiJ6b+DdWyY9X6wo85XCCHchazQCHczDROwfIgJJiYB8zE9cX7DNHXMxqyU/BvTwbkN8Dhm1eRNoIW1T1aFtNbXYS4bKaVUM2AfcCVmMzJa6+1AbpmXdAXusf7pU+uzFEIINyMrNMLdnMQ07PwJ08hwPKapX1NMM8e2QA/MnpePra8JxaygJAJzMJlIpzGrO+UopRoBfkqpB4FhQBfgZ8xeHC/M6s4ZG/M6Bqyw3h9Vu1MUQgj3IwGNcCta6+VKqc7Wh90we1oSMftg0qzPx2utRxa/Rin1MHCqOG27CrdgNhDvBnYBIzErM+eAh4F1SqkpWus4TIq4J2alNAkT+ABcag6rPLTWlhqfrBBCuBEJaIQ78gEaYTKdfDDp1JOsj/+FWb3ZUmZ8Iyr5t1K2m7fWehHmshVKqQGYvTmngH9prQuUUv+g9FJTI+AyYCwmjfz5Mm/7AuaS1w81O0UhhHAvUlhPuD2llJ/WOqeu5yGEEKLmJKARQgghRL0nWU5CCCGEqPckoBFCCCFEvScBjRBCCCHqPQlohBBCCFHvSUAjhBBCiHrv/wOooYSc0dViHQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 基尼系数函数\n",
    "def gini(p):\n",
    "    return 1-np.sum(p**2,axis=1)\n",
    "# 信息熵函数\n",
    "def entropy(p):\n",
    "    return -np.sum(p*np.log2(p),axis=1)\n",
    "# 错误率函数\n",
    "def error(p):\n",
    "    return 1-np.max(p,axis=1)\n",
    "p=np.linspace(0.01,0.99,200)\n",
    "# 计算概率组合\n",
    "parray=np.array([p,1-p]).T\n",
    "# 计算信息熵\n",
    "en=entropy(parray)\n",
    "# 计算缩放的信息熵\n",
    "en2=en*0.5\n",
    "# 计算错误率\n",
    "err=error(parray)\n",
    "# 计算基尼系数\n",
    "g=gini(parray)\n",
    "\n",
    "fig=plt.figure()\n",
    "for i,lab,ls,c, in zip([en,en2,g,err],['信息熵','信息熵(缩放)','基尼系数','错误率'],['-',':','--','-.'],['r','g','b','y']):\n",
    "    plt.plot(p,i,label=lab,linestyle=ls,lw=2,color=c)\n",
    "    plt.legend(loc='right',bbox_to_anchor=(1.55,0.8))\n",
    "    plt.axhline(y=0.5,linewidth=1,color='k',linestyle='--')\n",
    "    plt.axhline(y=1.0,linewidth=1,color='k',linestyle='--')\n",
    "    plt.ylim([0,1.1])\n",
    "    plt.xlabel('概率1取值')\n",
    "    plt.ylabel('纯度系数')\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## C.4.5算法 计算信息增益率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.97095059]\n",
      "[1.97095059]\n",
      "[3.32192809]\n"
     ]
    }
   ],
   "source": [
    "# 计算不同类别数量时,信息熵的对比,,每个元素代表一个类别所占的比例\n",
    "a1=np.array([[0.4,0.6]])\n",
    "a2=np.array([[0.3,0.3,0.2,0.2]])\n",
    "a3=np.array([[0.1]*10])\n",
    "\n",
    "print(entropy(a1))\n",
    "print(entropy(a2))\n",
    "print(entropy(a3))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## CART算法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9375\n",
      "0.6578947368421053\n"
     ]
    }
   ],
   "source": [
    "from sklearn.datasets import load_iris\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.tree import DecisionTreeClassifier  #实现决策树分类\n",
    "\n",
    "x,y=load_iris(return_X_y=True)\n",
    "x=x[:,:2]\n",
    "x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.25,random_state=0)\n",
    "'''\n",
    "criterion:不纯度度量标准,默认为gini\n",
    "gini:基尼参数,entropy:信息熵\n",
    "splitter:选择分裂节点的方式,默认为best\n",
    "    best:在最好的位置分裂节点 random:在随机的位置分裂节点\n",
    "max_depth:树的最大深度,默认为None(不限制深度)\n",
    "min_samples_split:分裂节点的最小样本数,默认为2\n",
    "min_sample_leaf:分裂节点后,叶子节点的最少的样本数量,默认为1\n",
    "max_features:分裂节点时,考虑的最大特征数量,默认为None(考虑所有特征)\n",
    "random_state:随机种子\n",
    "\n",
    "'''\n",
    "tree=DecisionTreeClassifier()\n",
    "tree.fit(x_train,y_train)\n",
    "print(tree.score(x_train,y_train))\n",
    "print(tree.score(x_test,y_test))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 定义列表,用来存储不同深度下,模型的分值\n",
    "train_score=[]\n",
    "test_score=[]\n",
    "\n",
    "for depth in range(1,13):\n",
    "    tree=DecisionTreeClassifier(random_state=0,max_depth=depth)\n",
    "    tree.fit(x_train,y_train)\n",
    "    train_score.append(tree.score(x_train,y_train))\n",
    "    test_score.append(tree.score(x_test,y_test))\n",
    "plt.plot(train_score,marker='o',c='r',label='训练集')\n",
    "plt.plot(test_score,marker='o',c='g',label='测试集')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从运行结果中，我们可知，随着最大深度的增加，训练集的表现越来越好，但是测试集的表现，是先增\n",
    "加后减少，这说明，在树深度较小时，模型是欠拟合的，因此，增加树深度，能够提升预测效果，但随\n",
    "着深度的增加，模型越来越依赖于训练集，这反而降低预测效果，造成过拟合"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 决策树回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.8290972700366354\n",
      "0.6354364289453209\n"
     ]
    }
   ],
   "source": [
    "from sklearn.datasets import load_boston\n",
    "from sklearn.tree import DecisionTreeRegressor\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "x,y=load_boston(return_X_y=True)\n",
    "x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.25,random_state=0)\n",
    "\n",
    "tree=DecisionTreeRegressor(max_depth=3)\n",
    "tree.fit(x_train,y_train)\n",
    "print(tree.score(x_train,y_train))\n",
    "print(tree.score(x_test,y_test))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
